home *** CD-ROM | disk | FTP | other *** search
/ Netware Super Library / Netware Super Library.iso / app_note / an108x / listnlms.c < prev    next >
Text File  |  1991-09-13  |  2KB  |  79 lines

  1. /****************************************************************************
  2. *    LISTNLMS.C
  3. *    Illustrate linked list traversal with NetWare internal debugger
  4. *  Builds list of NLMs in SYS:SYSTEM
  5. *
  6. *    Morgan Adair
  7. *    7/11/91
  8. ****************************************************************************/
  9.  
  10. #include <stdio.h>
  11. #include <nwdir.h>
  12. #include <string.h>
  13. #include <malloc.h>
  14. #include <conio.h>
  15. #include <errno.h>
  16.  
  17. typedef struct filename {
  18.     char    fname[NAME_MAX+1];    /* 12 + 1 bytes */
  19.     struct filename    *next;
  20. } FILE_NAME;
  21.  
  22. void CleanUp(void);
  23.  
  24. DIR    *sysSystem;
  25. FILE_NAME    *fileList = NULL;
  26.  
  27. void main(void)
  28. {
  29.     DIR            *dirEntry;
  30.     FILE_NAME    *newNode;
  31.     int            numFiles = 0;
  32.  
  33.     atexit(CleanUp);
  34.  
  35.     sysSystem = opendir("SYS:SYSTEM\\*.NLM");
  36.  
  37.     if (!sysSystem) {
  38.         printf("Unable to open SYS:SYSTEM");
  39.         exit();
  40.     }
  41.  
  42.     /* just for fun, break into the debugger here */
  43.     Breakpoint(1);
  44.  
  45.     do {    /* while getting directory entries */
  46.         dirEntry = readdir(sysSystem);
  47.         if (dirEntry) {
  48.              newNode = (FILE_NAME *)malloc(sizeof(FILE_NAME));
  49.             if (!newNode) {
  50.                      printf("Out of memory");
  51.                     exit();
  52.             }
  53.             numFiles++;
  54.             strcpy(newNode->fname, dirEntry->d_name);
  55.             newNode->next = fileList;
  56.             fileList = newNode;
  57.             /* display file name, just to keep up the appearance that
  58.                we're doing something useful (maybe if we sorted the
  59.                 file names alphabetically . . .) */
  60.             printf("%-20s", newNode->fname);
  61.         }
  62.     } while (dirEntry);
  63.  
  64.     Breakpoint(2);
  65. }
  66.  
  67. void CleanUp(void)
  68. {
  69.     FILE_NAME    *newNode;
  70.  
  71.     closedir(sysSystem);
  72.  
  73.     while (fileList) {
  74.          newNode = fileList;
  75.         fileList = fileList->next;
  76.         free(newNode);
  77.     }
  78. }
  79.